// 导出一个函数，用于获取图片的宽高信息
export const getImageInfo = (url: string | File) => {
  // 返回一个Promise对象
  return new Promise<{ width: number; height: number }>((resolve, reject) => {
    // 创建一个Image对象
    const img = new Image()
    img.crossOrigin = 'anonymous' // 处理跨域问题
    img.src = typeof url === 'string' ? url : URL.createObjectURL(url)
    img.onload = () => {
      const dpr = window.devicePixelRatio || 1
      const width = img.naturalWidth / dpr
      const height = img.naturalHeight / dpr
      resolve({ width, height })
    }
    img.onerror = () => {
      console.error('Image failed to load')
      reject(new Error('图片加载失败'))
    }
  })
}
// 导出一个函数，用于在数组中插入数据
export const insertAt = (arr: any[], index: number, data: any) => {
  // 在指定位置插入数据
  return [...arr.slice(0, index), data, ...arr.slice(index)]
}

// 导出一个函数，用于判断元素是否在具有指定类名的元素下
export function isUnderElementWithClass(
  element: HTMLElement | null,
  className: string
): boolean {
  // 如果元素为空，则返回false
  if (element === null) {
    return false
  }

  // 如果元素不是HTMLElement类型，则抛出错误
  if (!(element instanceof HTMLElement)) {
    throw new Error('The provided element is not an HTMLElement')
  }

  // 如果元素具有指定类名，则返回true
  if (element.classList.contains(className)) {
    return true
  }

  // 递归调用函数，判断元素的父元素是否具有指定类名
  return isUnderElementWithClass(element.parentElement, className)
}

export function copyToClipboard(text: string): Promise<void> {
  return new Promise((resolve, reject) => {
    // 尝试使用现代浏览器的 Clipboard API
    if (navigator.clipboard && navigator.clipboard.writeText) {
      navigator.clipboard
        .writeText(text)
        .then(() => resolve())
        .catch((err) => reject(err))
    } else {
      // 使用 document.execCommand('copy') 作为回退方案
      const textarea = document.createElement('textarea')
      textarea.value = text
      textarea.style.position = 'fixed'
      textarea.style.left = '-9999px'
      textarea.style.top = '-9999px'
      document.body.appendChild(textarea)
      textarea.select()
      try {
        document.execCommand('copy')
        resolve()
      } catch (err) {
        reject(err)
      } finally {
        document.body.removeChild(textarea)
      }
    }
  })
}

// 导出一个函数，用于文件下载
// 导出一个名为downLoadFile的函数，用于下载文件
export const downLoadFile = (url: string, fileName = 'download') => {
  // 创建一个a标签
  const a = document.createElement('a')
  // 设置a标签的href属性为传入的url
  a.href = url
  // 设置a标签的download属性为传入的fileName，如果未传入fileName，则默认为'download'
  a.download = encodeURI(fileName)
  // 设置a标签的rel属性为'noopener'
  a.rel = 'noopener'
  // 模拟点击a标签，下载文件
  a.click()
  // 移除a标签
  a.remove()
}
